﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using ENLibraryClass;
using System.Security.Permissions;
using System.Collections;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using uacars;

namespace uacars
{
    public partial class frmBusquedaAvanzada : Form
    {
        public frmCitas fcitas = null;

        public bool ValidarCampos()
        {
            bool aux = true;
            errorProvider1.Clear();

            if (dateTimePicker2.Value<dateTimePicker1.Value && checkBox1.Checked==true)
            {
                errorProvider1.SetError(dateTimePicker1, "La fecha final no puede ser menos que la inicial.");
                errorProvider1.SetError(dateTimePicker2, "La fecha final no puede ser menos que la inicial.");
                aux = false;
            }

            if (comboBox1.Text == "" && checkBox2.Checked==true)
            {
                errorProvider1.SetError(comboBox1, "Debe rellenar las horas, en caso contrario desmarque la opción.");
                aux = false;
            }

            if (comboBox2.Text == "" && checkBox2.Checked == true)
            {
                errorProvider1.SetError(comboBox2, "Debe rellenar las horas, en caso contrario desmarque la opción.");
                aux = false;
            }

            return aux;
        }
        

        public frmBusquedaAvanzada()
        {
            InitializeComponent();
            groupBox1.Enabled = false;
            groupBox2.Enabled = false;
            groupBox3.Enabled = false;
            groupBox4.Enabled = false;
            groupBox5.Enabled = false;
            groupBox6.Enabled = false;

        }

        

        private void checkBox5_Click(object sender, EventArgs e)
        {
            if (groupBox5.Enabled == true)
                groupBox5.Enabled = false;
            else
                groupBox5.Enabled = true;
        }

        private void checkBox6_Click(object sender, EventArgs e)
        {
            if (groupBox6.Enabled == true)
                groupBox6.Enabled = false;
            else
                groupBox6.Enabled = true;
        }



        private void checkBox3_Click(object sender, EventArgs e)
        {
            if (groupBox1.Enabled == true)
                groupBox1.Enabled = false;
            else
                groupBox1.Enabled = true;
        }

        private void checkBox4_Click(object sender, EventArgs e)
        {
            if (groupBox2.Enabled == true)
                groupBox2.Enabled = false;
            else
                groupBox2.Enabled = true;
        }

        private void checkBox1_Click_1(object sender, EventArgs e)
        {
            if (groupBox3.Enabled == true)
                groupBox3.Enabled = false;
            else
                groupBox3.Enabled = true;
        }

        private void checkBox2_Click(object sender, EventArgs e)
        {
            if (groupBox4.Enabled == true)
                groupBox4.Enabled = false;
            else
                groupBox4.Enabled = true;
        }

        private void radioButton1_Click(object sender, EventArgs e)
        {
            
            if (checkBox3.Enabled == true)
            {
                checkBox3.Enabled = false;
                if (groupBox1.Enabled == true)
                    groupBox1.Enabled = false;
                if (checkBox3.Checked == true)
                    checkBox3.Checked = false;
            }
            if (checkBox4.Enabled == true)
            {
                checkBox4.Enabled = false;
                if (groupBox2.Enabled == true)
                    groupBox2.Enabled = false;
                if (checkBox4.Checked == true)
                    checkBox4.Checked = false;
                
            }
            if (checkBox6.Enabled == true)
            {
                checkBox6.Enabled = false;
                if (groupBox6.Enabled == true)
                    groupBox6.Enabled = false;
                if (checkBox6.Checked == true)
                    checkBox6.Checked = false;
               
            }

            if (checkBox1.Enabled == false)
            {
                checkBox1.Enabled = true;
                if (groupBox3.Enabled == true)
                    groupBox3.Enabled = false;
                else
                    groupBox3.Enabled = true;
                if (checkBox1.Checked == true)
                    checkBox1.Checked = false;
            }
            if (checkBox2.Enabled == false)
            {
                checkBox2.Enabled = true;
                if (groupBox4.Enabled == true)
                    groupBox4.Enabled = false;
                else
                    groupBox4.Enabled = true;
                if (checkBox2.Checked == true)
                    checkBox2.Checked = false;
            }
            if (checkBox5.Enabled == false)
            {
                checkBox5.Enabled = true;
                if (groupBox5.Enabled == true)
                    groupBox5.Enabled = false;
                if (checkBox5.Checked == true)
                    checkBox5.Checked = false;
                
            }
            
                
        }

        private void radioButton2_Click(object sender, EventArgs e)
        {

            if (checkBox3.Enabled == false)
            {
                checkBox3.Enabled = true;
                
            }
            if (checkBox4.Enabled == false)
            {
                checkBox4.Enabled = true;
                
            }
            if (checkBox6.Enabled == false)
            {
                checkBox6.Enabled = true;
                
            }
            if (checkBox1.Enabled == false)
            {
                checkBox1.Enabled = true;
                
            }
            if (checkBox2.Enabled == false)
            {
                checkBox2.Enabled = true;
                
            }
            if (checkBox5.Enabled == false)
            {
                checkBox5.Enabled = true;
                
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            frmCitas fBA = new frmCitas(dt);
            fBA.fba = this;
            fBA.MdiParent = this.MdiParent;
            this.Close();
            fBA.Show();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (ValidarCampos())
            {
                try
                {
                    DataTable resultado = new DataTable();
                    //id, fecha, hora, vendedor, cliente, descripcion

                    int id = 0;
                    int vendedor = 0;
                    int cliente = 0;
                    string descripcion = "null";
                    DateTime fecha = new DateTime();
                    DateTime hora = new DateTime();
                    DateTime fechaFinal = new DateTime();
                    DateTime horaFinal = new DateTime();
                    string dtString = "01/01/1900";
                    string dhString = "01/01/1900 0:00:00";
                    string dtStringFinal = "01/01/1900";
                    string dhStringFinal = "01/01/1900 0:00:00";

                    fecha= DateTime.Parse(dtString);
                    hora = DateTime.Parse(dhString);
                    fechaFinal = DateTime.Parse(dtStringFinal);
                    horaFinal = DateTime.Parse(dhStringFinal);

                    if (checkBox5.Checked == true && radioButton2.Checked == true)
                    {
                        if (tbxCliente.Text.Length > 0 && checkBox3.Checked == true)
                            cliente = Convert.ToInt32(tbxCliente.Text);
                        if (tbxEmpleado.Text.Length > 0 && checkBox6.Checked == true)
                            vendedor = Convert.ToInt32(tbxEmpleado.Text);
                        if (textBox5.Text.Length > 0 && checkBox4.Checked == true)
                            descripcion = textBox5.Text;
                        if (checkBox1.Checked == true)
                        {
                            string d=dateTimePicker1.Value.Day.ToString();
                            string m = dateTimePicker1.Value.Month.ToString();
                            string a = dateTimePicker1.Value.Year.ToString();
                            string fecha1 = d + "/" + m + "/" + a+" 0:00:00";
                            d = dateTimePicker2.Value.Day.ToString();
                            m = dateTimePicker2.Value.Month.ToString();
                            a = dateTimePicker2.Value.Year.ToString();
                            string fecha2 = d + "/" + m + "/" + a + " 0:00:00";
                            DateTime Dfecha1 = new DateTime();
                            DateTime Dfecha2=new DateTime();
                            fecha = DateTime.Parse(fecha1);
                            fechaFinal = DateTime.Parse(fecha2);
                        }

                        if(checkBox2.Checked==true)
                        {

                            string fecha1 = "01/01/1900 " + comboBox1.Text.ToString();
                            string fecha2 = "01/01/1900 " + comboBox2.Text.ToString();
                            //MessageBox.Show(fecha1);
                            DateTime Dhora1 = new DateTime();
                            DateTime Dhora2 = new DateTime();
                            hora = DateTime.Parse(fecha1);
                            horaFinal = DateTime.Parse(fecha2);
                        }


                        ENCitas busqueda = new ENCitas(id, fecha, hora, vendedor, cliente, descripcion, fechaFinal, horaFinal);
                        resultado = busqueda.BuscarCitasPorIntervalo();

                        DataTable tmp = new DataTable();
                        frmCitas fBA = new frmCitas(resultado);
                        fBA.fba = this;
                        fBA.MdiParent = this.MdiParent;
                        fBA.Show();
                        this.Close();
                    }

                    if (checkBox5.Checked == true && radioButton1.Checked == true)
                    {
                        
                        DataTable dev = new DataTable();
                        DataColumn myDataColumn1 = new DataColumn();
                        DataColumn myDataColumn2 = new DataColumn();
                        DataColumn myDataColumn3 = new DataColumn();

                        myDataColumn1 = new DataColumn();
                        myDataColumn1.DataType = System.Type.GetType("System.DateTime");
                        myDataColumn1.ColumnName = "DIA";
                        //myDataColumn1.ReadOnly = true;
                        myDataColumn2 = new DataColumn();
                        myDataColumn2.DataType = System.Type.GetType("System.DateTime");
                        myDataColumn2.ColumnName = "HORA";
                        //myDataColumn2.ReadOnly = true;
                        myDataColumn3 = new DataColumn();
                        myDataColumn3.DataType = System.Type.GetType("System.String");
                        myDataColumn3.ColumnName = "ESTADO";
                        //myDataColumn3.ReadOnly = true;

                        dev.Columns.Add(myDataColumn1);
                        dev.Columns.Add(myDataColumn2);
                        dev.Columns.Add(myDataColumn3);
                        




                        if (checkBox1.Checked == true && checkBox2.Checked == true)
                        {
                            DataTable resultado1 = new DataTable();
                            DateTime dt=new DateTime();
                            ENCitas ec = new ENCitas(0, dt, dt, 0, 0, "null", dt, dt);
                            resultado1=ec.BuscarCitas();

                            DateTime hora1 = new DateTime();
                            DateTime hora2 = new DateTime();
                            string h1 = "01/01/1900 " + comboBox1.Text.ToString();
                            string h2 = "01/01/1900 " + comboBox2.Text.ToString();
                            hora1 = DateTime.Parse(h1);
                            hora2 = DateTime.Parse(h2);
                            DateTime tmp1 = new DateTime();
                            DateTime tmp2 = new DateTime();
                            bool estaEnDB = false;
                            DateTime fechaInicio=new DateTime();
                            DateTime fechaFinal2=new DateTime();
                            
                            string dtp1 = dateTimePicker1.Text.ToString()+" 0:00:00";
                            string dtp2 = dateTimePicker2.Text.ToString()+" 0:00:00";

                            //fechaInicio=dateTimePicker1.Value;
                            //fechaFinal2=dateTimePicker2.Value;

                            fechaInicio = DateTime.Parse(dtp1);
                            fechaFinal2 = DateTime.Parse(dtp2);

                            DateTime fechaActualRecorrido=new DateTime();
                            DateTime horaActualRecorrido=new DateTime();
                            fechaActualRecorrido=fechaInicio;
                            horaActualRecorrido=hora1;
                            int cont = 0;


                            //dateTimePicker1.Value; //desde esta valor empezamos a buscar los dias
                            //hora1 //de esta hora empezamos a buscar las horas

                            while (fechaActualRecorrido <= fechaFinal2 && horaActualRecorrido <= hora2)
                            {
                                foreach (DataRow row in resultado1.Rows)
                                {
                                    tmp1 = (DateTime)(TypeDescriptor.GetConverter(new DateTime(1990, 5, 6)).ConvertFrom(row[1].ToString()));
                                    tmp2 = (DateTime)(TypeDescriptor.GetConverter(new DateTime(1990, 5, 6)).ConvertFrom(row[2].ToString()));

                                    if (tmp1 == fechaActualRecorrido && tmp2 == horaActualRecorrido) //esta en la DB, no mostramos como libre
                                    {
                                        estaEnDB = true;
                                        break;
                                        
                                    }
                                    else//no esta en la DB
                                    {
                                        estaEnDB = false;
                                        
                                    }

                                }
                                
                                if (estaEnDB == false)
                                
                                {
                                    DataRow myDataRow = dev.NewRow();

                                    myDataRow["DIA"] = fechaActualRecorrido;
                                    myDataRow["HORA"] = horaActualRecorrido;
                                    //myDataRow["DIA"] = tmp1;
                                    //myDataRow["HORA"] = tmp2;
                                    myDataRow["ESTADO"] = "LIBRE";
                                    dev.Rows.Add(myDataRow);
                                }
                                
                                //estaEnDB = false;

                                cont++;
                                if (cont < 10 && cont!=6)
                                {
                                    //fechaActualRecorrido = fechaActualRecorrido.AddDays(1);
                                    horaActualRecorrido = horaActualRecorrido.AddHours(1);
                                }
                                else
                                {
                                    if (cont == 6)
                                    {
                                        horaActualRecorrido = horaActualRecorrido.AddHours(3);
                                    }
                                    else
                                    {
                                        fechaActualRecorrido = fechaActualRecorrido.AddDays(1);
                                        horaActualRecorrido = horaActualRecorrido.AddHours(-11);
                                        cont = 0;
                                    }
                                }
                            }

                        }
                        if (checkBox1.Checked == true && checkBox2.Checked == false)
                        {
                            {
                                DataTable resultado1 = new DataTable();
                                DateTime dt = new DateTime();
                                ENCitas ec = new ENCitas(0, dt, dt, 0, 0, "null", dt, dt);
                                resultado1 = ec.BuscarCitas();

                                DateTime hora1 = new DateTime();
                                DateTime hora2 = new DateTime();
                                string h1 = "01/01/1900 8:00:00";
                                string h2 = "01/01/1900 19:00:00";
                                hora1 = DateTime.Parse(h1);
                                hora2 = DateTime.Parse(h2);
                                DateTime tmp1 = new DateTime();
                                DateTime tmp2 = new DateTime();
                                bool estaEnDB = false;
                                DateTime fechaInicio = new DateTime();
                                DateTime fechaFinal2 = new DateTime();

                                string dtp1 = dateTimePicker1.Text.ToString() + " 0:00:00";
                                string dtp2 = dateTimePicker2.Text.ToString() + " 0:00:00";

                                //fechaInicio=dateTimePicker1.Value;
                                //fechaFinal2=dateTimePicker2.Value;

                                fechaInicio = DateTime.Parse(dtp1);
                                fechaFinal2 = DateTime.Parse(dtp2);

                                DateTime fechaActualRecorrido = new DateTime();
                                DateTime horaActualRecorrido = new DateTime();
                                fechaActualRecorrido = fechaInicio;
                                horaActualRecorrido = hora1;
                                int cont = 0;


                                //dateTimePicker1.Value; //desde esta valor empezamos a buscar los dias
                                //hora1 //de esta hora empezamos a buscar las horas

                                while (fechaActualRecorrido <= fechaFinal2 && horaActualRecorrido <= hora2)
                                {
                                    foreach (DataRow row in resultado1.Rows)
                                    {
                                        tmp1 = (DateTime)(TypeDescriptor.GetConverter(new DateTime(1990, 5, 6)).ConvertFrom(row[1].ToString()));
                                        tmp2 = (DateTime)(TypeDescriptor.GetConverter(new DateTime(1990, 5, 6)).ConvertFrom(row[2].ToString()));

                                        if (tmp1 == fechaActualRecorrido && tmp2 == horaActualRecorrido) //esta en la DB, no mostramos como libre
                                        {
                                            estaEnDB = true;
                                            break;

                                        }
                                        else//no esta en la DB
                                        {
                                            estaEnDB = false;

                                        }

                                    }

                                    if (estaEnDB == false)
                                    {
                                        DataRow myDataRow = dev.NewRow();

                                        myDataRow["DIA"] = fechaActualRecorrido;
                                        myDataRow["HORA"] = horaActualRecorrido;
                                        //myDataRow["DIA"] = tmp1;
                                        //myDataRow["HORA"] = tmp2;
                                        myDataRow["ESTADO"] = "LIBRE";
                                        dev.Rows.Add(myDataRow);
                                    }

                                    //estaEnDB = false;

                                    cont++;
                                    if (cont < 10 && cont != 6)
                                    {
                                        //fechaActualRecorrido = fechaActualRecorrido.AddDays(1);
                                        horaActualRecorrido = horaActualRecorrido.AddHours(1);
                                    }
                                    else
                                    {
                                        if (cont == 6)
                                        {
                                            horaActualRecorrido = horaActualRecorrido.AddHours(3);
                                        }
                                        else
                                        {
                                            fechaActualRecorrido = fechaActualRecorrido.AddDays(1);
                                            horaActualRecorrido = horaActualRecorrido.AddHours(-11);
                                            cont = 0;
                                        }
                                    }
                                }
                            }
                        }
                        if (checkBox1.Checked == false && checkBox2.Checked == true)
                        {
                            {
                            DataTable resultado1 = new DataTable();
                            DateTime dt=new DateTime();
                            ENCitas ec = new ENCitas(0, dt, dt, 0, 0, "null", dt, dt);
                            resultado1=ec.BuscarCitas();

                            DateTime hora1 = new DateTime();
                            DateTime hora2 = new DateTime();
                            string h1 = "01/01/1900 " + comboBox1.Text.ToString();
                            string h2 = "01/01/1900 " + comboBox2.Text.ToString();
                            hora1 = DateTime.Parse(h1);
                            hora2 = DateTime.Parse(h2);
                            DateTime tmp1 = new DateTime();
                            DateTime tmp2 = new DateTime();
                            bool estaEnDB = false;
                            DateTime fechaInicio=new DateTime();
                            DateTime fechaFinal2=new DateTime();
                            
                            string dtp1 = "01/01/2009 0:00:00";
                            string dtp2 = "01/01/2010 0:00:00";

                            //fechaInicio=dateTimePicker1.Value;
                            //fechaFinal2=dateTimePicker2.Value;

                            fechaInicio = DateTime.Parse(dtp1);
                            fechaFinal2 = DateTime.Parse(dtp2);

                            DateTime fechaActualRecorrido=new DateTime();
                            DateTime horaActualRecorrido=new DateTime();
                            fechaActualRecorrido=fechaInicio;
                            horaActualRecorrido=hora1;
                            int cont = 0;


                            //dateTimePicker1.Value; //desde esta valor empezamos a buscar los dias
                            //hora1 //de esta hora empezamos a buscar las horas

                            while (fechaActualRecorrido <= fechaFinal2 && horaActualRecorrido <= hora2)
                            {
                                foreach (DataRow row in resultado1.Rows)
                                {
                                    tmp1 = (DateTime)(TypeDescriptor.GetConverter(new DateTime(1990, 5, 6)).ConvertFrom(row[1].ToString()));
                                    tmp2 = (DateTime)(TypeDescriptor.GetConverter(new DateTime(1990, 5, 6)).ConvertFrom(row[2].ToString()));

                                    if (tmp1 == fechaActualRecorrido && tmp2 == horaActualRecorrido) //esta en la DB, no mostramos como libre
                                    {
                                        estaEnDB = true;
                                        break;
                                        
                                    }
                                    else//no esta en la DB
                                    {
                                        estaEnDB = false;
                                        
                                    }

                                }
                                
                                if (estaEnDB == false)
                                
                                {
                                    DataRow myDataRow = dev.NewRow();

                                    myDataRow["DIA"] = fechaActualRecorrido;
                                    myDataRow["HORA"] = horaActualRecorrido;
                                    //myDataRow["DIA"] = tmp1;
                                    //myDataRow["HORA"] = tmp2;
                                    myDataRow["ESTADO"] = "LIBRE";
                                    dev.Rows.Add(myDataRow);
                                }
                                
                                //estaEnDB = false;

                                cont++;
                                if (cont < 10 && cont!=6)
                                {
                                    //fechaActualRecorrido = fechaActualRecorrido.AddDays(1);
                                    horaActualRecorrido = horaActualRecorrido.AddHours(1);
                                }
                                else
                                {
                                    if (cont == 6)
                                    {
                                        horaActualRecorrido = horaActualRecorrido.AddHours(3);
                                    }
                                    else
                                    {
                                        fechaActualRecorrido = fechaActualRecorrido.AddDays(1);
                                        horaActualRecorrido = horaActualRecorrido.AddHours(-11);
                                        cont = 0;
                                    }
                                }
                            }
                        }
                        }
                        if (checkBox1.Checked == false && checkBox2.Checked == false)
                        {
                            {
                                DataTable resultado1 = new DataTable();
                                DateTime dt = new DateTime();
                                ENCitas ec = new ENCitas(0, dt, dt, 0, 0, "null", dt, dt);
                                resultado1 = ec.BuscarCitas();

                                DateTime hora1 = new DateTime();
                                DateTime hora2 = new DateTime();
                                string h1 = "01/01/1900 8:00:00";
                                string h2 = "01/01/1900 19:00:00";
                                hora1 = DateTime.Parse(h1);
                                hora2 = DateTime.Parse(h2);
                                DateTime tmp1 = new DateTime();
                                DateTime tmp2 = new DateTime();
                                bool estaEnDB = false;
                                DateTime fechaInicio = new DateTime();
                                DateTime fechaFinal2 = new DateTime();

                                string dtp1 = "01/01/2009 0:00:00";
                                string dtp2 = "01/01/2010 0:00:00";

                                //fechaInicio=dateTimePicker1.Value;
                                //fechaFinal2=dateTimePicker2.Value;

                                fechaInicio = DateTime.Parse(dtp1);
                                fechaFinal2 = DateTime.Parse(dtp2);

                                DateTime fechaActualRecorrido = new DateTime();
                                DateTime horaActualRecorrido = new DateTime();
                                fechaActualRecorrido = fechaInicio;
                                horaActualRecorrido = hora1;
                                int cont = 0;


                                //dateTimePicker1.Value; //desde esta valor empezamos a buscar los dias
                                //hora1 //de esta hora empezamos a buscar las horas

                                while (fechaActualRecorrido <= fechaFinal2 && horaActualRecorrido <= hora2)
                                {
                                    foreach (DataRow row in resultado1.Rows)
                                    {
                                        tmp1 = (DateTime)(TypeDescriptor.GetConverter(new DateTime(1990, 5, 6)).ConvertFrom(row[1].ToString()));
                                        tmp2 = (DateTime)(TypeDescriptor.GetConverter(new DateTime(1990, 5, 6)).ConvertFrom(row[2].ToString()));

                                        if (tmp1 == fechaActualRecorrido && tmp2 == horaActualRecorrido) //esta en la DB, no mostramos como libre
                                        {
                                            estaEnDB = true;
                                            break;

                                        }
                                        else//no esta en la DB
                                        {
                                            estaEnDB = false;

                                        }

                                    }

                                    if (estaEnDB == false)
                                    {
                                        DataRow myDataRow = dev.NewRow();

                                        myDataRow["DIA"] = fechaActualRecorrido;
                                        myDataRow["HORA"] = horaActualRecorrido;
                                        //myDataRow["DIA"] = tmp1;
                                        //myDataRow["HORA"] = tmp2;
                                        myDataRow["ESTADO"] = "LIBRE";
                                        dev.Rows.Add(myDataRow);
                                    }

                                    //estaEnDB = false;

                                    cont++;
                                    if (cont < 10 && cont != 6)
                                    {
                                        //fechaActualRecorrido = fechaActualRecorrido.AddDays(1);
                                        horaActualRecorrido = horaActualRecorrido.AddHours(1);
                                    }
                                    else
                                    {
                                        if (cont == 6)
                                        {
                                            horaActualRecorrido = horaActualRecorrido.AddHours(3);
                                        }
                                        else
                                        {
                                            fechaActualRecorrido = fechaActualRecorrido.AddDays(1);
                                            horaActualRecorrido = horaActualRecorrido.AddHours(-11);
                                            cont = 0;
                                        }
                                    }
                                }
                            }
                        }

                        //SqlCommandBuilder cBuilder = new SqlCommandBuilder(da);

                        //da.Update(bdvirtual, "citas");

                        //dtable.AcceptChanges();

                        frmCitas fBA = new frmCitas(dev);
                        fBA.fba = this;
                        fBA.MdiParent = this.MdiParent;
                        fBA.Show();
                        this.Close();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error en los argumentos de la busqueda", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                }
            }

            

            //MessageBox.Show(resultado.Rows.Count.ToString());
            

            
        }

        
    }
}
